package com.guomei.mapper.curse;

import com.guomei.bean.curse.UserCoupon;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 用户优惠券表数据访问接口
 */
@Mapper
public interface UserCouponMapper {
    /**
     * 根据ID查询用户优惠券
     */
    UserCoupon selectById(Long id);

    /**
     * 根据用户ID和优惠券ID查询
     */
    UserCoupon selectByUserIdAndCouponId(@Param("userId") Long userId, @Param("couponId") Long couponId);

    /**
     * 根据用户ID和优惠券ID查询
     */
    UserCoupon selectByUserIdAndCouponIdAndStatus(@Param("userId") Long userId, @Param("couponId") Long couponId, @Param("status") Short status);

    /**
     * 根据用户ID查询优惠券列表
     */
    List<UserCoupon> selectByUserId(@Param("userId") Long userId, @Param("status") Short status);

    /**
     * 根据订单号查询
     */
    UserCoupon selectByOrderNo(String orderNo);

    /**
     * 查询过期未使用的优惠券
     */
    List<UserCoupon> selectExpiredUnusedCoupons(@Param("currentTime") LocalDateTime currentTime);

    /**
     * 新增用户优惠券
     */
    int insert(UserCoupon userCoupon);

    /**
     * 批量新增用户优惠券
     */
    int batchInsert(@Param("userCoupons") List<UserCoupon> userCoupons);

    /**
     * 更新用户优惠券状态
     */
    int updateStatus(@Param("id") Long id, @Param("status") Short status,
                     @Param("useTime") LocalDateTime useTime, @Param("orderNo") String orderNo);

    /**
     * 批量更新优惠券状态为过期
     */
    int batchUpdateExpiredStatus(@Param("ids") List<Long> ids, @Param("currentTime") LocalDateTime currentTime);

    /**
     * 根据ID删除
     */
    int deleteById(Long id);
}
